#include<iostream>
#include<queue>
using namespace std;
int tu[5][5];//地图
int d[4][2]={1,0,-1,0,0,1,0,-1};//四个方向
struct lu{//路径结构体
  int nx,ny;
}a[100][100];//结构体的二维数组
void bfs(int,int);//搜索
void print(int,int);//输出函数
int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
        cin>>tu[i][j];//数据输入
    bfs(0,0);//从0，0开始搜索
    print(4,4);//输出4，4的上一步，之后递归进行
    return 0;
}
void bfs(int x,int y)
{
    queue<int>sx,sy;
    sx.push(x);//入队操作
    sy.push(y);
    a[sx.front()][sy.front()].nx=-1;//对初始点的上一个点赋值为-1代表没有上一个点
    a[sx.front()][sy.front()].ny=-1;
    tu[x][y]=1;//千万不要忘记！！细心很重要！
    while(!sx.empty()&&!sy.empty())//队列非空时进行
    {
        for(int i=0;i<4;i++)//四个方向
        {
            int xx=sx.front()+d[i][0];//移动
            int yy=sy.front()+d[i][1];
            if(xx>=0&&xx<5&&yy>=0&&yy<5&&!tu[xx][yy])//越界以及是否走过
            {
                sx.push(xx);//入队
                sy.push(yy);
                tu[xx][yy]=1;//覆盖
                a[xx][yy].nx=sx.front();//记录上一个点
                a[xx][yy].ny=sy.front();
                if(xx==4&&yy==4) return;//到达终点则返回
            }
        }
        sx.pop();//出队
        sy.pop();
    }
}
void print(int x,int y)
{
    if(a[x][y].nx==-1&&a[x][y].ny==-1)//到达初始点则输出0，0.不要忘记返回！
    {
        cout<<"(0, 0)"<<endl;
        return;
    }
        print(a[x][y].nx,a[x][y].ny);//递归进行输出上一个点
    cout<<"("<<x<<", "<<y<<")"<<endl;
    return;
}
